#include "cash.h"
#include <stdlib.h>
#include <string.h>
#include <assert.h>


//收银界面
void cash_menu(void) 			 //收银界面
{
	system("clear");
	puts("*****请选择用户形式*****");
	puts("1、普通用户支付");
	puts("2、VIP支付");
	puts("3、VIP注册");
	puts("4、退出");
}			 

//收银系统
void cash(void)
{
	bool vipkey;                 //区别普通用户和vip用户
	for(;;)
	{
		cash_menu();

		switch(get_cmd('1','4'))
		{
			case '1':vipkey=0;compf(vipkey);	 break;		//普通用户
			case '2':vipkey=1;compf(vipkey);	 break;		//vip用户
			case '3':add_vip_cash();	 		 break;		//vip注册
			case '4':return ;  
		 }
	}
}

void compf(bool vipkey) 							//普通用户购买
{						
	system("clear");
	int pos;							//记录在vip中的位置

    if(vipkey)
	{
		printf("请输入VIP电话：");

		char phone[20];
        get_str(phone,sizeof(phone));
		pos =query_vipphone(phone);    
        if(-1==pos)
	    {
	    	print_sec("该用户不存在，登录失败！",0.75);
	    	return;
	    }
	}
	double sum=0;       				//购买总价
	for(;;)
	{
		printf("请输入商品ID\n");

		int id;
		scanf("%d",&id);
		int index = query_goodsid(id);				//商品在结构体中的位置
		if(0 == id)
		{
			FILE *p_recond;
			p_recond = fopen("recond.txt","a");//打开记录流水的文件，并从最后一行开始记录


			printf("您的商品总价为%.2lf\n",sum);
			if(1==vipkey)
			{
				vip[pos].points += sum;
			    printf("您的积分增长了:%-5d,现在为%-5d",(int)sum,vip[pos].points);
				fprintf(p_recond,"VIP用户:%s 支付了:%.2lf元\n",vip[pos].phone,sum);
				fclose(p_recond);
				print_sec("购物完成!",3);
				break;
			}

			char phone[20];     //定义普通用户的付款账号
			printf("请输入您的付款账号:\n");
			scanf("%s",phone);

			fprintf(p_recond,"普通用户:%s 支付了:%.2lf元\n",phone,sum); //写入文件
			fclose(p_recond);
			print_sec("购物完成!",3);
			break;
		}
		if(-1==index)
        {
		    print_sec("该商品不存在！",0.75);
		    continue;
        }
		if(1>goods[index].num)
		{
			print_sec("该商品件数不够",0.75);
			continue;
		}


		sum+=goods[index].price ;
		printf("ID：%d  名称：%s 单价:%.2lf",goods[index].id,goods[index].name,goods[index].price);
		printf("当前总价：%.2lf\n",sum);
		goods[index].num -= 1;
		money.money_sum += goods[index].price;
		money.account_money+= goods[index].price;
	}
}

void add_vip_cash(void)				//在收银界面完成VIP注册，不用管理员密码就能完成
{
	// 判断用户是否已满
	if(cnt_vip >= VIP_MAX)
	{
		print_sec("VIP数量已满,无法添加！",0.75);
		return;
	}

	// 输入电话号
	printf("请输入VIP的手机号：\n");
	get_str(vip[cnt_vip].phone,sizeof(vip[cnt_vip].phone));
	// 检查电话是否被占用
	if(-1 < query_vipphone(vip[cnt_vip].phone))
	{
		print_sec("该电话已被占用，无法注册！",0.75);
		return;
	}

	// 输入密码
	char password[20];
	printf("请输入密码:\n");
	get_passwd(password,sizeof(password));
	printf("请再次输入密码:\n");
	get_passwd(vip[cnt_vip].password,sizeof(vip[cnt_vip].password));
	if(strcmp(vip[cnt_vip].password,password))
	{
		print_sec("密码输入不一致,请重新注册!",1);
		return;
	}

	//使用MD5进行加密
	MD5_CTX md5c;
	MD5Init(&md5c);
	int passwd_len = strlen(password);
	MD5Update(&md5c,(unsigned char*)password,passwd_len);
	MD5Final(&md5c,(unsigned char*)vip[cnt_vip].password);
	vip[cnt_vip].password[passwd_len] = '\0';

	vip[cnt_vip].points = 0;   //积分初值为0

	// 用户数量+1
	cnt_vip++;

	print_sec("注册成功!",0.75);
}